From: Ian Campbell Date: Mon, 18 Oct 2010 16:16:59 +0000 (+0100) Subject: libxc: add xc_machphys_mfn_list to wrap XENMEM_machphys_mfn_list X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~11390 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https:/%22bookmarks://%22Dat/%22http:/www.example.com/cgi/%22https:/%22bookmarks:/%22Dat?a=commitdiff_plain;h=3a97052f4353921447d8f3e58614350db5c3d120;p=xen.git libxc: add xc_machphys_mfn_list to wrap XENMEM_machphys_mfn_list Signed-off-by: Ian Campbell Signed-off-by: Ian Jackson --- diff --git a/tools/libxc/xc_domain_save.c b/tools/libxc/xc_domain_save.c index 2442cc7958..b6e239200b 100644 --- a/tools/libxc/xc_domain_save.c +++ b/tools/libxc/xc_domain_save.c @@ -623,7 +623,6 @@ xen_pfn_t *xc_map_m2p(xc_interface *xch, int prot, unsigned long *mfn0) { - struct xen_machphys_mfn_list xmml; privcmd_mmap_entry_t *entries; unsigned long m2p_chunks, m2p_size; xen_pfn_t *m2p; @@ -634,18 +633,14 @@ xen_pfn_t *xc_map_m2p(xc_interface *xch, m2p_size = M2P_SIZE(max_mfn); m2p_chunks = M2P_CHUNKS(max_mfn); - xmml.max_extents = m2p_chunks; - extent_start = calloc(m2p_chunks, sizeof(xen_pfn_t)); if ( !extent_start ) { ERROR("failed to allocate space for m2p mfns"); goto err0; } - set_xen_guest_handle(xmml.extent_start, extent_start); - if ( xc_memory_op(xch, XENMEM_machphys_mfn_list, &xmml) || - (xmml.nr_extents != m2p_chunks) ) + if ( xc_machphys_mfn_list(xch, m2p_chunks, extent_start) ) { PERROR("xc_get_m2p_mfns"); goto err1; diff --git a/tools/libxc/xc_private.c b/tools/libxc/xc_private.c index d32c1d42cb..5c9fb39d0a 100644 --- a/tools/libxc/xc_private.c +++ b/tools/libxc/xc_private.c @@ -549,6 +549,20 @@ long long xc_domain_get_cpu_usage( xc_interface *xch, domid_t domid, int vcpu ) return domctl.u.getvcpuinfo.cpu_time; } +int xc_machphys_mfn_list(xc_interface *xch, + unsigned long max_extents, + xen_pfn_t *extent_start) +{ + int rc; + struct xen_machphys_mfn_list xmml = { + .max_extents = max_extents, + }; + set_xen_guest_handle(xmml.extent_start, extent_start); + rc = xc_memory_op(xch, XENMEM_machphys_mfn_list, &xmml); + if (rc || xmml.nr_extents != max_extents) + return -1; + return 0; +} #ifndef __ia64__ int xc_get_pfn_list(xc_interface *xch, diff --git a/tools/libxc/xenctrl.h b/tools/libxc/xenctrl.h index 4a3223dfdf..33f01eb382 100644 --- a/tools/libxc/xenctrl.h +++ b/tools/libxc/xenctrl.h @@ -753,6 +753,10 @@ int xc_numainfo(xc_interface *xch, xc_numainfo_t *info); int xc_sched_id(xc_interface *xch, int *sched_id); +int xc_machphys_mfn_list(xc_interface *xch, + unsigned long max_extents, + xen_pfn_t *extent_start); + typedef xen_sysctl_cpuinfo_t xc_cpuinfo_t; int xc_getcpuinfo(xc_interface *xch, int max_cpus, xc_cpuinfo_t *info, int *nr_cpus);